#!/usr/bin/python
# -*- coding: utf-8 -*-

import re
import os
import gnupg
import sys

gpg = gnupg.GPG(gnupghome='/home/joger/.tibisay/gpg')

listaFicheros = []
listaCrear = []
pathOrigen = '/home/joger/workspace/ftp/src'
pathDestino = '/home/joger/Almacenando'
carpetaDestino  = ''
if os.path.isdir(pathOrigen):
    carpetaDestino = pathOrigen.split("/")[-1]
rutaDestino = pathDestino + '/' + carpetaDestino


def obtenerArchivos(path):
        
        if os.path.isdir(path):
            #Aqui vamos a listar el contenido del directorio
            lista = os.listdir(path)
            #Recorremos el contenido del directorio y creamos la recursividad
            for valor in lista:
                r = obtenerArchivos(os.path.join(path,valor))
                if r != None:
                    listaFicheros.append(r)
                    listaCrear.append(re.sub(pathOrigen + '/',rutaDestino + '/',r))
        else:# os.path.isfile(path):
            return path
        
        
def obtenerDir(listaFicheros):
    urls = []
    for x in listaFicheros:
        url = ''
        for r in x.split('/')[0:-1]:
            url+= '%s/' % r
    
        if url != '':
            try:
                url = re.sub(pathOrigen + '/',rutaDestino + '/',url)
                urls.index(url)
            except ValueError:
                urls.append(url)

    return urls

obtenerArchivos(pathOrigen)
urls = obtenerDir(listaFicheros)

print "###############COMIENZO####################################"
print "Directorios a crear"    
print urls
print "###################################################"
print "Archivos a Firmar/Cifrar"
print listaFicheros
print "###################################################"
print "Archivos a Crear en Ruta destino"
print listaCrear
print "###################################################"
print "Ruta a crear"
print rutaDestino

print "###################################################"
print "Procedemos a crear los directorios en la carpeta destino"

for ca in urls:
    try:
        os.makedirs(ca)
    except OSError:
        pass
    except:
        print str(sys.exc_info[0])

print "Procedemos a Firmar/Cifrar y almacenar en la ruta destino"

for i in range(len(listaFicheros)):
    f = open(listaFicheros[i],'rb')
    data = f.read()
    f.close()
    #Firmo
    datos = gpg.sign(data,keyid="jogerq@gmail.com",passphrase="12")
    #print "Datos firmados: %s \n" % datos.data
    #Cifro
    datos = gpg.encrypt(datos.data,"irisrus@gmail.com")
    #print "Datos Cifrados: %s \n" % datos.data
    #Creo el archivo
    #print listaCrear[i]
    f = open(listaCrear[i],"wb")
    f.write(datos.data)
    f.close()


"""
archivo = open("archivo_sig_cryto.txt","w")
archivo.write(crifrado.data)
archivo.close()
archivo = open("archivo_sig_cryto.txt","rb")
a_decryto = gpg.decrypt(archivo.read(),passphrase="12345678")
firma = gpg.verify(a_decryto.data)
print firma.valid
True
"""
